Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: Coding   发起时间: 2008-08-11 17:16 下午   回复: 3

Print Search
帖子排序:    
   2008-08-11, 17:16 下午
Coding 离线,最后访问时间: 2010/2/20 12:12:52 Coding

发帖数前10位
注册: 2008-05-31
发 贴: 103
如何阻止Application发现自己被中断到debugger
Reply Quote

我记得有个函数调用是可以知道自己是否正在被调试,不过名字我忘记了。谁知道?

不过我正好要做相反的事情,有个应用程序每次都会检查自己是不是正在被调试,一旦是它就退出了。

我只有这个应用程序的可执行文件,不知道有没有什么办法能够欺骗应用程序,让他无法知道。

恩,我的目的不是去破解它,只是这个程序会调用我写的一个dll,我只想去调试我自己的dll

谢谢


IP 地址: 已记录   报告
   2008-08-11, 18:43 下午
neilhsu 离线,最后访问时间: 2009/12/23 17:02:23 手语

发帖数前10位
男
注册: 2008-06-06
发 贴: 73
Re: 如何阻止Application发现自己被中断到debugger
Reply Quote
这要看被调试程序用什么方法判断是否被调试。

你要找的API是不是IsDebuggerPresent()?
如果被调试程序用这个方法判断那就很好办了。
这个函数是通过判断PEB中的一个标志项来判断的,所以反转一下那个标志就能搞定了。

0:001> dt _PEB 7ffdb000
ntdll!_PEB
+0x000 InheritedAddressSpace : 0 ''
+0x001 ReadImageFileExecOptions : 0 ''
+0x002 BeingDebugged : 0x1 '' <-- 就是它,1 byte
+0x003 SpareBool : 0 ''
+0x004 Mutant : 0xffffffff
......

如果被调试程序用的是其他方法,那就要具体问题具体分析了。
曾经听说有的软件通过判断父进程是否是“explorer.exe”或“cmd.exe”来检测调试器。 汗...
鸿鹄安知燕雀之志
IP 地址: 已记录   报告
   2008-08-12, 09:18 上午
Coding 离线,最后访问时间: 2010/2/20 12:12:52 Coding

发帖数前10位
注册: 2008-05-31
发 贴: 103
Re: 如何阻止Application发现自己被中断到debugger
Reply Quote
恩,解决了部分问题,的确调用了这个函数来检查,不过似乎不止于此。我的调试环境是Windbg双机kernel mode调试(因为还需要同时调试driver),在这个情况下BeingDebugged一直都是0, 我想应该还检查了另外的什么东西,比如Kernel的调试引擎是否开启,被调试的东西就是Windows Media Player,所以我想不太会有很诡异的方法来检测调试器。

IP 地址: 已记录   报告
   2008-08-12, 11:09 上午
neilhsu 离线,最后访问时间: 2009/12/23 17:02:23 手语

发帖数前10位
男
注册: 2008-06-06
发 贴: 73
Re: 如何阻止Application发现自己被中断到debugger
Reply Quote
再提供两种检查调试器的方法,请考虑相应的应对办法。

1. 把程序的主逻辑移到 user defined unhandled exception filter 函数中,然后通过在程序的开始认为引发异常来启动主逻辑。这样如果程序由调试器启动,就不会进入逻辑代码,可能会导致程序直接结束。

2. A ring 3 debugger can be detected by calling NtQueryInformationProcess in ntdll.dll from another ring3 app with the constant ProcessDebugPort (0x07h). This function takes a pointer also as an argument, to store its return value. If it returns anything other than a zero, it means that process in question is operating as a debugger.
Windows call NtQueryInformationProcess with ProcessInformationClass is 7 (DebugPort) to detect a app is being debugged. For example: open a exe with Visual studio or OllyDbg, open TaskManager, and kill the debugged exe, Windows will warning: "Program being debugged" or "Access denied".

如果内核调试器是softice那情况可能更复杂一些。
鸿鹄安知燕雀之志
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 如何阻止Application发现自己被中断到debugger

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.